/**
 * 数据类
 * @description 存储游戏需要的业务变量
 */
class Store {
  /** canvas对象 */
  public canvas: HTMLCanvasElement = null
  /** canvas2d上下文 */
  public ctx: CanvasRenderingContext2D = null
  /** 资源仓库 */
  public map: Map<string, unknown> = null
  /** 数据仓库（单次游戏数据） */
  private readonly data = new Map()

  /**
   * 提交数据仓库
   * @param key 键
   * @param value 值
   * @returns 单例对象
   */
  public put<T>(key: string, value: T | T[]): Store {
    this.data.set(key, value)
    return this
  }

  /**
   * 查询数据仓库
   * @param key 键
   * @returns 查询值
   */
  public get<T>(key: string): T {
    return this.data.get(key)
  }

  /**
   * 清空数据仓库
   * @returns 单例对象
   */
  public destroy(): Store {
    this.data.clear()
    return this
  }
}

export default new Store()
